home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d18 / twars.arc / TWEDIT.PAS < prev    next >
Pascal/Delphi Source File  |  1991-04-28  |  42KB  |  1,559 lines

  1.  
  2. PROGRAM twedit;
  3.  
  4. (*$C-*) (*$v-*)
  5. (*$I COMMON.PAS*)
  6.  
  7. CONST
  8.       fs = 'tradewar\TWDATA.DAT';
  9.       p  : ARRAY[1..3] OF STR =
  10.                                 ('Ore.......','Organics..','Equipment.');
  11.       b  : ARRAY[1..3] OF INTEGER =
  12.                                     (10,20,35);
  13.  
  14. TYPE
  15.      users = RECORD
  16.                fa                   : STRING[41];
  17.                fareal               : string[41];
  18.                fb,fc,fd,fe,ff,fg    : INTEGER;
  19.                fh,fi,fj,fk,fl,fr,fp : INTEGER;
  20.                fm,fo,fq,ft,fv       : INTEGER;
  21.                credits              : real;
  22.              END;
  23.  
  24.      teamrec  = RECORD
  25.                name                 : string[41];
  26.                captain              : string[41];
  27.                datemade             : string[8];
  28.                password             : string[8];
  29.                rank                 : real;
  30.                kills                : integer;
  31.              END;
  32.  
  33.  
  34. VAR
  35.     sm2,
  36.     smg         : FILE OF smr;
  37.     rteams,
  38.     tteams      : teamrec;
  39.     lmd         : integer;
  40.     pnn         : STRING[41];
  41.     y,a,mo,d,go,pn,pd,s2,st,g2,prr   : INTEGER;
  42.     ay,tt,lp,ls,lt1,ll1 : INTEGER;
  43.     userf       : FILE OF users;
  44.     teams       : FILE OF teamrec;
  45.     userz,
  46.     userr,usert : users;
  47.     e           :  ARRAY[1..6] OF INTEGER;
  48.     m,n,pub,c1,h : ARRAY[0..3] OF REAL;
  49.     s           : ARRAY[0..200,0..1] OF INTEGER;
  50.     srr         : ARRAY[0..3,0..1] OF REAL;
  51.     g           : ARRAY[0..9,0..1]   OF INTEGER;
  52.     ended,done  : BOOLEAN;
  53.     aim         : STR;
  54.  
  55. procedure Mmkey(var i:str);
  56.   var c:char;
  57.   begin
  58.     repeat
  59.       repeat
  60.         getkey(c);
  61.       until (((c>=' ') and (c<chr(127))) or (c=chr(13))) or hangup;
  62.       c:=upcase(c);
  63.       outkey(c);
  64.       thisline:=thisline+c;
  65.       if (c='/') or (c='1') then begin
  66.         i:=c;
  67.         repeat
  68.           getkey(c);
  69.         until ((c>=' ')and(c<=chr(127))) or (c=chr(13)) or (c=chr(8)) or hangup;
  70.         c:=upcase(c);
  71.         if c<>chr(13) then begin outkey(c); thisline:=thisline+c; end;
  72.         if (c=chr(8)) or (c=chr(127)) then prompt(' '+c);
  73.         if c='/' then input(i,20) else if c<>chr(13) then i:=i+c;
  74.       end else i:=c;
  75.     until (c<>chr(8)) and (c<>chr(127)) or hangup;
  76.     nl;
  77.   end;
  78.  
  79. FUNCTION sgn(i:INTEGER): INTEGER;
  80.   BEGIN
  81.     IF i>0
  82.       THEN
  83.         sgn := 1
  84.       ELSE
  85.         IF i<0
  86.           THEN
  87.             sgn := -1
  88.           ELSE
  89.             sgn := 0;
  90.   END;
  91.  
  92. PROCEDURE readin(i:INTEGER;VAR user:users);
  93. BEGIN
  94.   SEEK(userf,i);
  95.   READ(userf,user);
  96. END;
  97.  
  98. PROCEDURE writeout(i:INTEGER;user:users);
  99. BEGIN
  100.   SEEK(userf,i);
  101.   WRITE(userf,user);
  102. END;
  103.  
  104. PROCEDURE getdate;
  105.  
  106.   VAR
  107.       a,code    : INTEGER;
  108.       datea : STR;
  109. BEGIN
  110.     d := daynum(date)-1094;
  111. END;
  112.  
  113.  
  114. (*34110 REM **/ REMOVE SHIP P FROM PERSON-IN-SECTOR CHAIN /**)
  115.  
  116. PROCEDURE removeship(p:INTEGER);
  117.  
  118.   VAR
  119.       r,b  : INTEGER;
  120.       done : BOOLEAN;
  121. BEGIN
  122.   readin(p,usert);
  123.   r := usert.ff;
  124.   readin(lp+r,usert);
  125.   a := usert.fi;
  126.   IF a<>0
  127.     THEN
  128.       IF a=p
  129.         THEN
  130.           BEGIN
  131.             readin(a,usert);
  132.             b := usert.fo;
  133.             readin(lp+r,usert);
  134.             usert.fi := b;
  135.             writeout(lp+r,usert);
  136.           END
  137.         ELSE
  138.           BEGIN
  139.             done := FALSE;
  140.             readin(a,usert);
  141.             REPEAT
  142.               IF usert.fo = p
  143.                 THEN
  144.                   BEGIN
  145.                     b := a;
  146.                     done := TRUE;
  147.                   END;
  148.               a := usert.fo;
  149.               readin(a,usert);
  150.             UNTIL done;
  151.             a := usert.fo;
  152.             readin(b,usert);
  153.             usert.fo := a;
  154.             writeout(b,usert);
  155.           END;
  156.   readin(pn,userr);
  157. END;
  158.  
  159. PROCEDURE ssm(dest:INTEGER; s:STR);
  160.  
  161. VAR
  162.     x: smr;
  163.     e,cp,t: INTEGER;
  164.     u: userrec;
  165. BEGIN
  166.   (*$I-*)
  167.   RESET(smg);(*$I+*)
  168.   IF IORESULT<>0
  169.     THEN
  170.       REWRITE(smg);
  171.   e := FILESIZE(smg);
  172.   IF e=0
  173.     THEN
  174.       cp := 0
  175.     ELSE
  176.       BEGIN
  177.         t := e-1;
  178.         SEEK(smg,t);
  179.         READ(smg,x);
  180.         WHILE (t>0) AND (x.destin=-1) DO
  181.           BEGIN
  182.             t := t-1;
  183.             SEEK(smg,t);
  184.             READ(smg,x);
  185.           END;
  186.         cp := t+1;
  187.       END;
  188.   SEEK(smg,cp);
  189.   x.msg := s;
  190.   x.destin := dest;
  191.   WRITE(smg,x);
  192.   CLOSE(smg);
  193. END;
  194.  
  195.  
  196. PROCEDURE message(p,po,n,n1: INTEGER);
  197. BEGIN
  198.   IF (po<2)
  199.     THEN
  200.       ssm(p,'The Ferrengi destroyed '+cstr(n)+' fighters.')
  201.     ELSE
  202.       BEGIN
  203.         readin(po,usert);
  204.         if n1=0 then
  205.         WITH usert DO
  206.           ssm(p,fa+' destroyed '+cstr(n)+' fighters.')
  207.         ELSE
  208.         WITH usert DO
  209.           ssm(p,fa+' destroyed '+cstr(n1)+' shield points and '
  210.           +cstr(n)+' of your fighters.');
  211.       END;
  212. END;
  213.  
  214.  
  215. PROCEDURE rsm;
  216.  
  217. VAR
  218.     x: smr;
  219.     i: INTEGER;
  220.     NOTHING : BOOLEAN;
  221. BEGIN
  222.   nothing := TRUE;
  223.   (*$I-*)
  224.   RESET(smg); (*$I+*)
  225.   IF IORESULT=0
  226.     THEN
  227.       BEGIN
  228.         i := 0;
  229.         REPEAT
  230.           IF i<=FILESIZE(smg)-1
  231.             THEN
  232.               BEGIN
  233.                 SEEK(smg,i);
  234.                 READ(smg,x);
  235.               END;
  236.           WHILE (i<FILESIZE(smg)-1) AND (x.destin<>pn) DO
  237.             BEGIN
  238.               i := i+1;
  239.               SEEK(smg,i);
  240.               READ(smg,x);
  241.             END;
  242.           IF (x.destin=pn) AND (i<=FILESIZE(smg)-1)
  243.             THEN
  244.               BEGIN
  245.                 print(x.msg);
  246.                 SEEK(smg,i);
  247.                 x.destin := -1;
  248.                 WRITE(smg,x);
  249.                 nothing := FALSE;
  250.               END;
  251.           i := i+1;
  252.         UNTIL (i>FILESIZE(smg)-1) OR hangup;
  253.         CLOSE(smg);
  254.       END;
  255.       if nothing then print('Nothing');
  256. END;
  257.  
  258.  
  259. (* 34230 REM **/ DELETE PLAYER P FROM GAME /**)
  260.  
  261. PROCEDURE DELETE(p: INTEGER);
  262.  
  263.   VAR
  264.       l: INTEGER;
  265. BEGIN
  266.   readin(p,usert);
  267.   print('Deleting '+usert.fa+'...');
  268.   removeship(p);
  269.   readin(p,usert);
  270.   usert.fm := 0;
  271.   usert.fr := 0;
  272.   usert.fareal := 'Unused Player Record';
  273.   writeout(p,usert);
  274.   FOR l:=lp+1 TO ls DO
  275.     BEGIN
  276.       readin(l,usert);
  277.       IF usert.fm=p
  278.         THEN
  279.           BEGIN
  280.             usert.fm := -2;
  281.             writeout(l,usert);
  282.           END;
  283.     END;
  284.   pn := p;
  285.   rsm;
  286.   FOR l:=2 TO lp DO
  287.     BEGIN
  288.       readin(l,usert);
  289.       IF usert.fc=p
  290.         THEN
  291.           BEGIN
  292.             usert.fc := -98;
  293.             writeout(l,usert);
  294.           END;
  295.     END;
  296. END;
  297.  
  298. (* 7500 REM **/ FIND SHORTEST ROUTE FROM A TO B IN S(200,1) /**)
  299.  
  300. PROCEDURE shortest(a,b: INTEGER);
  301.  
  302.   VAR
  303.       n,c,l,m : INTEGER;
  304.       found   : BOOLEAN;
  305. BEGIN
  306.   if b>1000 then b:= 1000;
  307.   n := 1;
  308.   c := b;
  309.   IF a=b
  310.     THEN
  311.       BEGIN
  312.         s[0,0] := a;
  313.         s[0,1] := 0;
  314.         s[a,1] := 0;
  315.       END
  316.     ELSE
  317.       BEGIN
  318.         FOR l:=1 TO 1000 DO
  319.           FOR m:=0 TO 1 DO
  320.             s[l,m] := 0;
  321.         s[a,1] := 1;
  322.         found := FALSE;
  323.         REPEAT
  324.           l := 1;
  325.           REPEAT
  326.             IF s[l,1]=n
  327.               THEN
  328.                 BEGIN
  329.                   readin(l+lp,usert);
  330.                   e[1] := usert.fb;
  331.                   e[2] := usert.fc;
  332.                   e[3] := usert.fd;
  333.                   e[4] := usert.fe;
  334.                   e[5] := usert.ff;
  335.                   e[6] := usert.fg;
  336.                   FOR m:=1 TO 6 DO
  337.                     IF e[m]<>0
  338.                       THEN
  339.                         IF s[e[m],1]=0
  340.                           THEN
  341.                             BEGIN
  342.                               s[e[m],1] := n+1;
  343.                               s[e[m],0] := l;
  344.                               IF e[m]=b
  345.                                 THEN
  346.                                   found := TRUE;
  347.                             END;
  348.                 END;
  349.             l := l+1;
  350.           UNTIL found OR (l>1000);
  351.           IF NOT found
  352.             THEN
  353.               n := n+1;
  354.         UNTIL found OR (n>=60);
  355.         IF NOT found
  356.           THEN
  357.             BEGIN
  358.               sysoplog('*** Error - Sector path not found - from sector'
  359.                        +cstr(a)+' to sector'+cstr(b));
  360.               print('*** Error - Sector path not found - from sector'+cstr(a)+
  361.               ' to sector'+cstr(b));
  362.               s[a,1] := 0;
  363.               ended := TRUE;
  364.             END
  365.           ELSE
  366.             REPEAT
  367.               s[s[c,0],1] := c;
  368.               c := s[c,0];
  369.               IF s[c,0]=0
  370.                 THEN
  371.                   s[b,1] := 0;
  372.             UNTIL s[c,0]=0;
  373.       END;
  374. END;
  375.  
  376.  
  377. (*2500 RANK PLAYERS WITH FT$ AND FV$.  P = STARTING PERSON, 0=NO PLAYERS *)
  378.  
  379. PROCEDURE rank(VAR p: INTEGER);
  380.  
  381.   VAR
  382.       l,g0,h0,f0,n,o,j0,k0,l0,v,c : INTEGER;
  383.       done                        : BOOLEAN;
  384. BEGIN
  385.   FOR l:=2 TO lp DO
  386.     BEGIN
  387.       readin(l,usert);
  388.       IF usert.fm=0
  389.         THEN
  390.           BEGIN
  391.             usert.fv := -1;
  392.             writeout(l,usert);
  393.           END
  394.         ELSE
  395.           IF usert.fc<>0
  396.             THEN
  397.               BEGIN
  398.                 usert.fv := 0;
  399.                 writeout(l,usert);
  400.               END
  401.             ELSE
  402.               BEGIN
  403.                 g0 := usert.fg;
  404.                 h0 := usert.fh;
  405.                 f0 := usert.fi;
  406.                 j0 := usert.fj;
  407.                 k0 := usert.fk;
  408.                 l0 := trunc(usert.credits);
  409.                 v := g0*2+h0*25+ROUND(f0*2.5)+j0*5+ROUND(k0*8.75)+ROUND(l0/20);
  410.                 usert.fv := v;
  411.                 writeout(l,usert);
  412.               END;
  413.     END;
  414.   FOR l:=lp+1 TO ls DO
  415.     BEGIN
  416.       readin(l,usert);
  417.       IF (usert.fl<>0) AND (usert.fm>=2)
  418.         THEN
  419.           BEGIN
  420.             a := usert.fl;
  421.             p := usert.fm;
  422.             readin(p,usert);
  423.             usert.fv := usert.fv+a*25;
  424.             writeout(p,usert);
  425.           END;
  426.     END;
  427.   p := 0;
  428.   FOR l:=2 TO lp DO
  429.     BEGIN
  430.       readin(l,usert);
  431.       v := usert.fv;
  432.       IF v<>-1
  433.         THEN
  434.           BEGIN
  435.             n := p;
  436.             o := 0;
  437.             done := FALSE;
  438.             IF p=0
  439.               THEN
  440.                 BEGIN
  441.                   p := l;
  442.                   usert.ft := -1;
  443.                   writeout(l,usert);
  444.                 END
  445.               ELSE
  446.                 REPEAT
  447.                   readin(n,usert);
  448.                   IF (v>usert.fv) AND (o=0)
  449.                     THEN
  450.                       BEGIN
  451.                         readin(l,usert);
  452.                         usert.ft := p;
  453.                         writeout(l,usert);
  454.                         p := l;
  455.                         done := TRUE;
  456.                       END
  457.                     ELSE
  458.                       IF v>usert.fv
  459.                         THEN
  460.                           BEGIN
  461.                             readin(o,usert);
  462.                             c := usert.ft;
  463.                             usert.ft := l;
  464.                             writeout(o,usert);
  465.                             readin(l,usert);
  466.                             usert.ft := c;
  467.                             writeout(l,usert);
  468.                             done := TRUE;
  469.                           END
  470.                         ELSE
  471.                           IF usert.ft=-1
  472.                             THEN
  473.                               BEGIN
  474.                                 readin(n,usert);
  475.                                 usert.ft := l;
  476.                                 writeout(n,usert);
  477.                                 readin(l,usert);
  478.                                 usert.ft := -1;
  479.                                 writeout(l,usert);
  480.                                 done := TRUE;
  481.                               END
  482.                             ELSE
  483.                               BEGIN
  484.                                 o := n;
  485.                                 n := usert.ft;
  486.                               END;
  487.                 UNTIL done;
  488.           END;
  489.     END;
  490. END;
  491.  
  492. PROCEDURE killed(pn,p: INTEGER);
  493.  
  494.   VAR
  495.       l : INTEGER;
  496. BEGIN
  497.   removeship(p);
  498.   readin(p,usert);
  499.   usert.fc := pn;
  500.   usert.ff := 0;
  501.   writeout(p,usert);
  502.   FOR l:=lp+1 TO ls DO
  503.     BEGIN
  504.       readin(l,usert);
  505.       IF (usert.fm=p) AND (random(2)=0)
  506.         THEN
  507.           BEGIN
  508.             usert.fm := -2;
  509.             writeout(l,usert);
  510.           END;
  511.     END;
  512. END;
  513.  
  514.  
  515.  
  516. PROCEDURE addship(p:INTEGER);
  517. (* 7000 **/ ADD SHIP P PERSON-IN-SECTOR CHAIN /**)
  518.  
  519.   VAR 
  520.       r,b  : INTEGER;
  521.       done : BOOLEAN;
  522. BEGIN
  523.   r := userr.ff;
  524.   IF r<>0
  525.     THEN
  526.       BEGIN
  527.         readin(lp+r,usert);
  528.         b := usert.fi;
  529.         usert.fi := p;
  530.         writeout(lp+r,usert);
  531.         userr.fo := b;
  532.         writeout(pn,userr);
  533.       END;
  534. END;
  535.  
  536. PROCEDURE init;
  537.  
  538.   VAR
  539.       l   : INTEGER;
  540.       done : BOOLEAN;
  541. BEGIN
  542.   ASSIGN(smg,'tradewar\TWSMF.DAT');
  543.   ended := FALSE;
  544.   ASSIGN(userf,'tradewar\TWDATA.DAT');
  545.   RESET(userf);
  546.   readin(1,userr);
  547.   WITH userr DO
  548.     BEGIN
  549.       ay := fc;
  550.       tt := fd;
  551.       lp := fe;
  552.       ls := ff;
  553.       lt1 := fg;
  554.       lmd := fl;
  555.       ll1 := fo;
  556.     END;
  557.   getdate;
  558. END;
  559.  
  560.  
  561.  
  562. PROCEDURE helpit;
  563. BEGIN
  564.   nl;
  565.   print('<TWEditor Commands>');
  566.   nl;
  567.   print(' <M>  Run TWs Maintenance');
  568.   print(' <C>  Cabal Display');
  569.   print(' <G>  General info editor');
  570.   print(' <S>  Sector editor');
  571.   print(' <T>  Planet Display');
  572.   print(' <U>  User editor');
  573.   print(' <Q>  Quit back to BBS');
  574. END;
  575.  
  576. FUNCTION addblank(b:STR;l:INTEGER): STR;
  577. BEGIN
  578.   WHILE LENGTH(b)< l DO
  579.     b := ' '+b;
  580.   addblank := b;
  581. END;
  582.  
  583.  
  584. PROCEDURE getuser(VAR p:INTEGER; a:STR);
  585. (*19000 GET P, A USER NUMBER FROM A$, A GIVEN AN NAME OR NUMBER.  P=0 = NONE*)
  586.  
  587. VAR
  588.     found : BOOLEAN;
  589. BEGIN
  590.   found := FALSE;
  591.   p := 2;
  592.   IF a='' THEN
  593.       p := 0
  594.   ELSE
  595.       IF value(a) <> 0 THEN
  596.           p := value(a)
  597.       ELSE
  598.         BEGIN
  599.           REPEAT
  600.             readin(p,usert);
  601.             IF usert.fareal = a THEN
  602.               found := TRUE;
  603.             p := p+1;
  604.           UNTIL (p>lp) OR found;
  605.           p := p-1;
  606.           IF NOT found THEN
  607.             BEGIN
  608.               print('Not found.');
  609.               p := 0;
  610.             END;
  611.         END;
  612. END;
  613.  
  614.  
  615. PROCEDURE uedit;
  616.  
  617.  VAR
  618.     ir : real;
  619.      i : STR;
  620.      p,e : INTEGER;
  621. BEGIN
  622.   nl;
  623.   prompt('User Name or Number: ');
  624.   INPUT(i,41);
  625.   IF (i='')
  626.     THEN done := TRUE;
  627.   getuser(p,i);
  628.   pn := p;
  629.   IF p<>0
  630.     THEN
  631.       IF (pn<2) OR (pn>lp)
  632.         THEN
  633.           BEGIN
  634.             print('Invalid player name or number.');
  635.           END
  636.       ELSE
  637.           BEGIN
  638.             cls;
  639.             readin(pn,usert);
  640.             print('Complete record storage for player number: '+cstr(pn));
  641.             nl;
  642.             prompt('<A> Alias: ');
  643.             IF usert.fm=0
  644.               THEN
  645.                 print('<Player record not used>')
  646.               ELSE
  647.                 print(usert.fa+' (#'+cstr(pn)+')');
  648.             prompt('<R> Real Name: ');
  649.                 print(usert.fareal);
  650.             prompt('<B> Last day on: ');
  651.             getdate;
  652.             e := usert.fb;
  653.             d := d-e;
  654.             IF d=0
  655.               THEN
  656.                 print(' today')
  657.               ELSE
  658.                 IF d>0
  659.                   THEN
  660.                     print(cstr(d)+' days ago')
  661.                   ELSE
  662.                     print(' Will be allowed on in '+cstr(-d)+' days');
  663.             a := usert.fc;
  664.             prompt('<C> Killed by: ');
  665.             IF a=0
  666.               THEN
  667.                 print('<No one>')
  668.               ELSE
  669.                 IF a=-99
  670.                   THEN
  671.                     BEGIN
  672.                       print('<To be initialized>') ;
  673.                       a := 0;
  674.                     END
  675.                   ELSE
  676.                     IF a=-98
  677.                       THEN
  678.                         BEGIN
  679.                           print('<A person who has been deleted>') ;
  680.                           a := 0;
  681.                         END;
  682.             IF a<>0 THEN
  683.               IF a=-1 THEN
  684.                 print('<Romulans>')
  685.               ELSE
  686.                 IF a=-2 THEN
  687.                   print('<Rogue fighters>')
  688.                 ELSE
  689.                   IF (a<2) OR (a>lp) THEN
  690.                     print('Unknown value: '+cstr(a))
  691.                   ELSE
  692.                     BEGIN
  693.                       readin(a,userr);
  694.                       print(userr.fa+' (#'+cstr(a)+')');
  695.                     END;
  696.             print('<D> Turns left: '+cstr(usert.fd));
  697.             print('<E> Ship Armor: '+cstr(usert.fe));
  698.             print('<F> K3-A Fighters: '+cstr(usert.fg));
  699.             print('<G> Total cargo holds: '+cstr(usert.fh));
  700.             print('  <H> Ore: '+cstr(usert.fi)+'   <I> Org: '+cstr(usert.fj)+
  701.                  '   <J> Eqp: '+cstr(usert.fk));
  702.             print('<K> Credits: '+cstrr(usert.credits,10));
  703.             print('<L> Last sector in: '+cstr(usert.fq));
  704.             print('<M> Location: sector '+cstr(usert.ff));
  705.             print('<O> Next Ship-in-sector chain value: '+cstr(usert.fo));
  706.             print('??? USERT.FP: '+cstr(usert.fp));
  707.             print('<T> Team number: '+cstr(usert.fr));
  708.             print('<Q> Return to Main Menu ');
  709.             print('<!> Delete player ');
  710.             print('<?> Print Command List ');
  711.             nl;
  712.             prompt('Command? ');
  713.             INPUT(i,1);
  714.             IF i=''
  715.               THEN
  716.                 BEGIN
  717.                 END;
  718.             IF i='?'
  719.               THEN
  720.                 BEGIN
  721.                 END;
  722.             IF i='A'
  723.               THEN
  724.                 BEGIN
  725.                   nl;
  726.                   prompt('New Alias? ');
  727.                   INPUTl(i,41);
  728.                   usert.fa := i;
  729.                   usert.fm := LENGTH(usert.fa);
  730.                   writeout(pn,usert);
  731.                 END;
  732.             IF i='R'
  733.               THEN
  734.                 BEGIN
  735.                   nl;
  736.                   prompt('New Real name? ');
  737.                   INPUT(i,41);
  738.                   usert.fareal := i;
  739.                   writeout(pn,usert);
  740.                 END;
  741.             IF i='B'
  742.               THEN
  743.                 BEGIN
  744.                   nl;
  745.                   prompt('Last Day On? ');
  746.                   INPUT(i,3);
  747.                   a := value(i);
  748.                   getdate;
  749.                   usert.fb := d-a;
  750.                   writeout(pn,usert);
  751.                 END;
  752.             IF i='C'
  753.               THEN
  754.                 BEGIN
  755.                   nl;
  756.                   prompt('Killed by?  (-98 killer deleted, -99 TBInit) ');
  757.                   INPUT(i,3);
  758.                   a := value(i);
  759.                   usert.fc := a;
  760.                   writeout(pn,usert);
  761.                 END;
  762.             IF i='D'
  763.               THEN
  764.                 BEGIN
  765.                   nl;
  766.                   prompt('Turns Left? ');
  767.                   INPUT(i,3);
  768.                   a := value(i);
  769.                   usert.fd := a;
  770.                   writeout(pn,usert);
  771.                 END;
  772.             IF i='E' THEN
  773.                 begin
  774.                   nl;
  775.                   prompt('Ship armor? ');
  776.                   input(i,3);
  777.                   a := value(i);
  778.                   if a > 200 then
  779.                     print('Ship structure will not support more than 200.')
  780.                   else
  781.                     usert.fe := a;
  782.                   writeout(pn,usert);
  783.                 END;
  784.             IF i='F' THEN
  785.                 BEGIN
  786.                   nl;
  787.                   prompt('K3-A Fighters on board? ');
  788.                   INPUT(i,4);
  789.                   a := value(i);
  790.                   usert.fg := a;
  791.                   writeout(pn,usert);
  792.                 END;
  793.             IF i='G' THEN
  794.                 BEGIN
  795.                   nl;
  796.                   prompt('Cargo holds? ');
  797.                   INPUT(i,3);
  798.                   a := value(i);
  799.                   usert.fh := a;
  800.                   writeout(pn,usert);
  801.                   IF usert.fi+usert.fj+usert.fk > usert.fh
  802.                     THEN
  803.                       print('*** Warning *** Amount of cargo in holds '+
  804.                             'is greater than to total cargo holds.');
  805.                 END;
  806.             IF i='H'
  807.               THEN
  808.                 BEGIN
  809.                   nl;
  810.                   prompt('Ore? ');
  811.                   INPUT(i,3);
  812.                   a := value(i);
  813.                   usert.fi := a;
  814.                   writeout(pn,usert);
  815.                 END;
  816.             IF i='I'
  817.               THEN
  818.                 BEGIN
  819.                   nl;
  820.                   prompt('Organics? ');
  821.                   INPUT(i,3);
  822.                   a := value(i);
  823.                   usert.fj := a;
  824.                   writeout(pn,usert);
  825.                 END;
  826.             IF i='J'
  827.               THEN
  828.                 BEGIN
  829.                   nl;
  830.                   prompt('Equipment? ');
  831.                   INPUT(i,3);
  832.                   a := value(i);
  833.                   usert.fk := a;
  834.                   writeout(pn,usert);
  835.                 END;
  836.             IF i='K'
  837.               THEN
  838.                 BEGIN
  839.                   nl;
  840.                   prompt('Credits? ');
  841.                   readln(ir);
  842.                   usert.credits := ir;
  843.                   writeout(pn,usert);
  844.                 END;
  845.             IF i='L' THEN
  846.                 BEGIN
  847.                   nl;
  848.                   prompt('Last sector in? ');
  849.                   INPUT(i,3);
  850.                   a := value(i);
  851.                   usert.fq := a;
  852.                   writeout(pn,usert);
  853.                 END;
  854.             IF i='T' THEN
  855.                 BEGIN
  856.                   nl;
  857.                   prompt('Team number? ');
  858.                   INPUT(i,3);
  859.                   a := value(i);
  860.                   usert.fr := a;
  861.                   writeout(pn,usert);
  862.                 END;
  863.             IF i='M'
  864.               THEN
  865.                 BEGIN
  866.                   nl;
  867.                   prompt('Location? ');
  868.                   INPUT(i,3);
  869.                   a := value(i);
  870.                   usert.ff := a;
  871.                   writeout(pn,usert);
  872.                 END;
  873.             IF i='O' THEN
  874.                 begin
  875.                   nl;
  876.                   prompt('Next ship in sector chain value? ');
  877.                   input(i,3);
  878.                   a := value(i);
  879.                   usert.fo := a;
  880.                   writeout(pn,usert);
  881.                 END;
  882.             IF i='!'
  883.               THEN
  884.                 DELETE(pn);
  885.             IF i='Q'
  886.               THEN
  887.                 done := TRUE;
  888.           END;
  889. END;
  890.  
  891. PROCEDURE cabal;
  892.  
  893. VAR
  894.     r,b,go,l,m : INTEGER;
  895.     im         : STR;
  896. BEGIN
  897.   FOR l:=1 TO 9 DO
  898.     BEGIN
  899.       readin(l+lp,usert);
  900.       g[l,0] := usert.ft;
  901.       g[l,1] := 0;
  902.     END;
  903.   FOR l:=1 TO 8 DO
  904.     FOR m:=l+1 TO 9 DO
  905.       IF g[l,0]=g[m,0]
  906.         THEN
  907.           g[m,0] := 0;
  908.   go := 0;
  909.   FOR l:=1 TO 9 DO
  910.     IF g[l,0]<>0
  911.       THEN
  912.         BEGIN
  913.           readin(g[l,0]+lp,usert);
  914.           IF usert.fm=-1
  915.             THEN
  916.               g[l,1] := usert.fl;
  917.         END;
  918.   FOR l:=1 TO 9 DO
  919.     BEGIN
  920.       readin(l+lp,usert);
  921.       usert.ft := g[l,0];
  922.       writeout(l+lp,usert);
  923.     END;
  924.   nl;
  925.   print('Group Location Size Goal Type');
  926.   print('~~~~~ ~~~~~~~~ ~~~~ ~~~~ ~~~~');
  927.   FOR b:=1 TO 9 DO
  928.     BEGIN
  929.       STR(b,im);
  930.       prompt(addblank(im,5));
  931.       readin(lp+b,usert);
  932.       r := usert.ft;
  933.       IF r=0
  934.         THEN
  935.           print('   <Does not exist>')
  936.         ELSE
  937.           BEGIN
  938.             go := usert.fq;
  939.             readin(lp+r,usert);
  940.             STR(r,im);
  941.             prompt(addblank(im,9));
  942.             IF usert.fm<>-1
  943.               THEN
  944.                 prompt(addblank('0',5))
  945.               ELSE
  946.                 BEGIN;
  947.                   STR(usert.fl,im);
  948.                   prompt(addblank(im,5));
  949.                 END;
  950.             IF go<>0
  951.               THEN
  952.                 BEGIN
  953.                   STR(go,im);
  954.                   prompt(addblank(im,5));
  955.                 END
  956.               ELSE
  957.                 prompt('     ');
  958.             IF b<3
  959.               THEN
  960.                 print(' Defense')
  961.               ELSE
  962.                 IF b<6
  963.                   THEN
  964.                     print(' Wandering')
  965.                   ELSE
  966.                     IF b<9
  967.                       THEN
  968.                         print(' Attack')
  969.                       ELSE
  970.                         print(' Attack top player');
  971.           END;
  972.     END;
  973. END;
  974.  
  975. PROCEDURE gedit;
  976.  
  977.   VAR
  978.       a: INTEGER;
  979.       i: STR;
  980. BEGIN
  981.   readin(1,usert);
  982.   cls;
  983.   print('Complete record storage for TW game stats');
  984.   nl;
  985.   print('     usert.fa: '+usert.fa+'    usert.fe: '+cstr(usert.fe));
  986.   print('     usert.fb: '+cstr(usert.fb)+'    usert.ff: '+cstr(usert.ff));
  987.   print('     usert.fc: '+cstr(usert.fc)+'    usert.fg: '+cstr(usert.fg));
  988.   print(' <B> Turns per day: '+cstr(usert.fd));
  989.   print(' <C> Initial fighters: '+cstr(usert.fh));
  990.   print(' <D> Initial credits: '+cstr(usert.fi));
  991.   print(' <E> Initial cargo holds: '+cstr(usert.fj));
  992.   print(' <F> Days until an inactive player is deleted: '+cstr(usert.fk));
  993.   prompt(' <G> Last day maintence run: ');
  994.   getdate;
  995.   a := usert.fl;
  996.   IF d=a
  997.     THEN
  998.       print('Today')
  999.     ELSE
  1000.       IF d-1=a
  1001.         THEN
  1002.           print('Yesterday')
  1003.         ELSE
  1004.           print(cstr(d-a)+' days ago');
  1005.   print('     usert.fm: '+cstr(usert.fm)+'    usert.fo: '+cstr(usert.fo));
  1006.   print('     usert.fp: '+cstr(usert.fp)+'    usert.fq: '+cstr(usert.fq));
  1007.   print(' <H> Cabal regeneration: '+cstr(usert.fr)+' ftrs/day');
  1008.   print('     usert.ft: '+cstr(usert.ft)+'    usert.fv: '+cstr(usert.fv));
  1009.   print('     Maximum number of players: '+cstr(lp-1));
  1010.   print('     Fixed number of sectors: '+cstr(ls-lp));
  1011.   print('     Fixed number of ports: '+cstr(lt1-ls));
  1012.   nl;
  1013.   prompt('General editor command (?=help)? ');
  1014.   INPUT(i,1);
  1015.   IF (i='') OR (i='Q') OR (i=' ')
  1016.     THEN
  1017.       done := TRUE;
  1018.   IF i='B'
  1019.     THEN
  1020.       BEGIN
  1021.         prompt('Turns/day? ');
  1022.         INPUT(i,2);
  1023.         IF i<>''
  1024.           THEN
  1025.             BEGIN
  1026.               a := value(i);
  1027.               usert.fd := a;
  1028.               writeout(1,usert);
  1029.               IF a<1
  1030.                 THEN
  1031.                   BEGIN
  1032.                     nl;
  1033.                     print('*** Warning ***  Must be > 0');
  1034.                   END;
  1035.             END;
  1036.       END;
  1037.   IF i='C'
  1038.     THEN
  1039.       BEGIN
  1040.         prompt('# of ftrs? ');
  1041.         INPUT(i,4);
  1042.         IF i<>''
  1043.           THEN
  1044.             BEGIN
  1045.               a := value(i);
  1046.               usert.fh := a;
  1047.               writeout(1,usert);
  1048.               IF a<1
  1049.                 THEN
  1050.                   BEGIN
  1051.                     nl;
  1052.                     print('*** Warning ***  Must be > 0');
  1053.                   END;
  1054.             END;
  1055.       END;
  1056.   IF i='D'
  1057.     THEN
  1058.       BEGIN
  1059.         prompt('# of credits? ');
  1060.         INPUT(i,5);
  1061.         IF i<>''
  1062.           THEN
  1063.             BEGIN
  1064.               a := value(i);
  1065.               usert.fi := a;
  1066.               writeout(1,usert);
  1067.               IF a<1
  1068.                 THEN
  1069.                   BEGIN
  1070.                     nl;
  1071.                     print('*** Warning ***  Must be > 0');
  1072.                   END;
  1073.             END;
  1074.       END;
  1075.   IF i='E'
  1076.     THEN
  1077.       BEGIN
  1078.         prompt('# of holds? ');
  1079.         INPUT(i,2);
  1080.         IF i<>''
  1081.           THEN
  1082.             BEGIN
  1083.               a := value(i);
  1084.               usert.fj := a;
  1085.               writeout(1,usert);
  1086.               IF (a<1) OR (a>50)
  1087.                 THEN
  1088.                   BEGIN
  1089.                     nl;
  1090.                     print('*** Warning ***  Range 0..50');
  1091.                   END;
  1092.             END;
  1093.       END;
  1094.   IF i='F'
  1095.     THEN
  1096.       BEGIN
  1097.         prompt('Days until deleted? ');
  1098.         INPUT(i,2);
  1099.         IF i<>''
  1100.           THEN
  1101.             BEGIN
  1102.               a := value(i);
  1103.               usert.fk := a;
  1104.               writeout(1,usert);
  1105.               IF (a<1)
  1106.                 THEN
  1107.                   BEGIN
  1108.                     nl;
  1109.                     print('*** Warning ***  Must be > 0');
  1110.                   END;
  1111.             END;
  1112.       END;
  1113.   IF i='G'
  1114.     THEN
  1115.       BEGIN
  1116.         print('0=Today, 1=Yesterday, -4=won''t be run for another 4 days');
  1117.         prompt('Last Day Maintence run? ');
  1118.         INPUT(i,2);
  1119.         IF i<>''
  1120.           THEN
  1121.             BEGIN
  1122.               a := value(i);
  1123.               getdate;
  1124.               usert.fl := d-a;
  1125.               writeout(1,usert);
  1126.             END;
  1127.       END;
  1128.   IF i='H'
  1129.     THEN
  1130.       BEGIN
  1131.         prompt('Romulan fighter regeneration? ');
  1132.         INPUT(i,3);
  1133.         IF i<>''
  1134.           THEN
  1135.             BEGIN
  1136.               a := value(i);
  1137.               usert.fr := a;
  1138.               writeout(1,usert);
  1139.               IF (a<1)
  1140.                 THEN
  1141.                   BEGIN
  1142.                     nl;
  1143.                     print('*** Warning ***  Must be > 0');
  1144.                   END;
  1145.             END;
  1146.       END;
  1147. END;
  1148.  
  1149. PROCEDURE sected;
  1150.  
  1151.   VAR
  1152.       i   : STR;
  1153.       a,b : INTEGER;
  1154. BEGIN
  1155.   NL;
  1156.   PRINT('Sector Editor');
  1157.   NL;
  1158.   PROMPT('What sector do you want displayed? ');
  1159.   INPUT(i,4);
  1160.   if i<>'' then
  1161.     BEGIN
  1162.     a:=value(i);
  1163.     IF (a>0) AND (a<(ls-lp)+1) THEN
  1164.       BEGIN
  1165.       a:=a+lp;
  1166.       readin(a,usert);
  1167.       cls;
  1168.       PRINT('Complete record storage for Sector #'+cstr(a-lp));
  1169.       nl;
  1170.       PRINT(' <Z> Nebulae : '+usert.fa);
  1171.       PRINT(' <A> Exit #1 : '+cstr(usert.fb));
  1172.       PRINT(' <B> Exit #2 : '+cstr(usert.fc));
  1173.       PRINT(' <C> Exit #3 : '+cstr(usert.fd));
  1174.       PRINT(' <D> Exit #4 : '+cstr(usert.fe));
  1175.       PRINT(' <E> Exit #5 : '+cstr(usert.ff));
  1176.       PRINT(' <F> Exit #6 : '+cstr(usert.fg));
  1177.       IF usert.fh <= 0 THEN
  1178.         Begin
  1179.           PRINT('     No port in this sector.')
  1180.         End
  1181.       ELSE
  1182.         Begin
  1183.           prompt(' <G> Port #'+cstr(usert.fh));
  1184.           Readin(ls+usert.fh,usert);
  1185.           print(', Port Name: '+usert.fa+', Port Type: '+cstr(usert.fb));
  1186.           Readin(a,usert);
  1187.         End;
  1188.       PRINT('     Last ship to enter sector: '+cstr(usert.fi));
  1189.       PRINT(' <H> Fighters in sector: '+cstr(usert.fl));
  1190.       If ((usert.fl > 0) AND (usert.fm < 0)) Then
  1191.         IF usert.fm = -2 THEN
  1192.           PRINT(' <I> Rogue mercenaries')
  1193.         ELSE
  1194.           print(' <I> Owned by the Romulan Empire');
  1195.       IF ((usert.fl > 0) AND (usert.fm > 0) ) THEN
  1196.         BEGIN
  1197.           Readin(usert.fm,usert);
  1198.           PROMPT(' <I> Owned by: '+usert.fa);
  1199.           Readin(a,usert);
  1200.           PRINT(' #'+cstr(usert.fm));
  1201.         END;
  1202.       IF usert.fo = 0 THEN
  1203.         PRINT(' <J> No planet in this sector')
  1204.       ELSE
  1205.         Begin
  1206.           PROMPT(' <J> Planet #'+cstr(usert.fo));
  1207.           Readin(lt1+usert.fo,usert);
  1208.           print(', Name: '+usert.fa);
  1209.           Readin(a,usert);
  1210.         End;
  1211.       IF (a-lp)<10 THEN
  1212.         BEGIN
  1213.           PRINT('* Romulan Stats of Unknown Origin *');
  1214.           PRINT('     Usert.fp: '+cstr(usert.fp));
  1215.         END
  1216.       ELSE
  1217.         PRINT(' <K> Number of mines in sector: '+cstr(usert.fp));
  1218.       PRINT('     Usert.fq: '+cstr(usert.fq));
  1219.       PRINT('     Usert.fr: '+cstr(usert.fr));
  1220.       PRINT('     Usert.ft: '+cstr(usert.ft));
  1221.       PRINT('     Usert.fv: '+cstr(usert.fv));
  1222.       END
  1223.     ELSE
  1224.       PRINT('Sectors are numbered 1 to '+cstr(ls-lp));
  1225.     END
  1226.   ELSE
  1227.     DONE:=TRUE;
  1228.   nl;
  1229.   PROMPT('Sector editor command: ');
  1230.   mmkey(i);
  1231.   if length(i)=1 then case i[1] of
  1232.  
  1233.        'Z' : BEGIN
  1234.              print('Enter new Nebulae name: ');
  1235.              inputl(i,41);
  1236.              if i<>'' then
  1237.                 usert.fa := i;
  1238.              writeout(a,usert);
  1239.              END;
  1240.        'A' : BEGIN
  1241.                PRINT('Exit #1 currently points to: '+cstr(usert.fb)+'.');
  1242.                PROMPT('Where should it point to? (0 = No Exit) ');
  1243.                INPUT(i,4);
  1244.                b:=value(i);
  1245.                IF (b>=0) AND (b <= (ls-lp)) THEN
  1246.                  BEGIN
  1247.                    usert.fb:=b;
  1248.                    writeout(a,usert);
  1249.                    print(' Modified stats saved');
  1250.                    (* Modified stats saved in record a, sector a-lp*)
  1251.                  END
  1252.                ELSE PRINT('Invalid sector-try again');
  1253.              END;
  1254.  
  1255.        'B' : BEGIN
  1256.                PRINT('Exit #2 currently points to: '+cstr(usert.fc)+'.');
  1257.                PROMPT('Where should it point to? (0 = No Exit) ');
  1258.                INPUT(i,4);
  1259.                b:=value(i);
  1260.                IF (b>=0) AND (b <= (ls-lp)) THEN
  1261.                  BEGIN
  1262.                    usert.fc:=b;
  1263.                    writeout(a,usert);
  1264.                    print(' Modified stats saved');
  1265.                  END
  1266.                ELSE PRINT('Invalid sector-try again');
  1267.              END;
  1268.  
  1269.        'C' : BEGIN
  1270.                PRINT('Exit #3 currently points to: '+cstr(usert.fd)+'.');
  1271.                PROMPT('Where should it point to? (0 = No Exit) ');
  1272.                INPUT(i,4);
  1273.                b:=value(i);
  1274.                IF (b>=0) AND (b <= (ls-lp)) THEN
  1275.                  BEGIN
  1276.                    usert.fd:=b;
  1277.                    writeout(a,usert);
  1278.                    print(' Modified stats saved');
  1279.                  END
  1280.                ELSE PRINT('Invalid sector-try again');
  1281.              END;
  1282.  
  1283.        'D' : BEGIN
  1284.                PRINT('Exit #4 currently points to: '+cstr(usert.fe)+'.');
  1285.                PROMPT('Where should it point to? (0 = No Exit) ');
  1286.                INPUT(i,4);
  1287.                b:=value(i);
  1288.                IF (b>=0) AND (b <= (ls-lp)) THEN
  1289.                  BEGIN
  1290.                    usert.fe:=b;
  1291.                    writeout(a,usert);
  1292.                    print(' Modified stats saved');
  1293.                  END
  1294.                ELSE PRINT('Invalid sector-try again');
  1295.              END;
  1296.  
  1297.        'E' : BEGIN
  1298.                PRINT('Exit #5 currently points to: '+cstr(usert.ff)+'.');
  1299.                PROMPT('Where should it point to? (0 = No Exit) ');
  1300.                INPUT(i,4);
  1301.                b:=value(i);
  1302.                IF (b>=0) AND (b <= (ls-lp)) THEN
  1303.                  BEGIN
  1304.                    usert.ff:=b;
  1305.                    writeout(a,usert);
  1306.                    print(' Modified stats saved');
  1307.                  END
  1308.                ELSE PRINT('Invalid sector-try again');
  1309.              END;
  1310.  
  1311.        'F' : BEGIN
  1312.                PRINT('Exit #6 currently points to: '+cstr(usert.fg)+'.');
  1313.                PROMPT('Where should it point to? (0 = No Exit) ');
  1314.                INPUT(i,4);
  1315.                b:=value(i);
  1316.                IF (b>=0) AND (b <= (ls-lp)) THEN
  1317.                  BEGIN
  1318.                    usert.fg:=b;
  1319.                    writeout(a,usert);
  1320.                    print(' Modified stats saved');
  1321.                  END
  1322.                ELSE PRINT('Invalid sector-try again');
  1323.              END;
  1324.  
  1325.        'G' : BEGIN
  1326.                PRINT('Port # is currently: '+cstr(usert.fh)+'.');
  1327.                PROMPT('Enter desired port #: ');
  1328.                INPUT(i,3);
  1329.                b:=value(i);
  1330.                IF (b>=0) AND (b <= (lt1-ls+1)) THEN
  1331.                  BEGIN
  1332.                    usert.fh:=b;
  1333.                    writeout(a,usert);
  1334.                    print(' Modified stats saved');
  1335.                  END
  1336.                ELSE PRINT('Invalid port # ');
  1337.              END;
  1338.  
  1339.        'H' : BEGIN
  1340.                PRINT('There are currently '+cstr(usert.fl)+
  1341.                      ' fighters in this sector.');
  1342.                PROMPT('Enter new number of fighters: ');
  1343.                INPUT(i,4);
  1344.                b:=value(i);
  1345.                IF (b>=0) AND (b<=9999) THEN
  1346.                  BEGIN
  1347.                    usert.fl:=b;
  1348.                    writeout(a,usert);
  1349.                    print(' Modified stats saved');
  1350.                  END
  1351.                ELSE PRINT('Invalid # of fighters ');
  1352.              END;
  1353.  
  1354.        'I' : BEGIN
  1355.                PRINT('The fighters here are owned by player'+
  1356.                      ' number: '+cstr(usert.fm)+'.');
  1357.                PROMPT('Enter player number of new owner: ');
  1358.                INPUT(i,3);
  1359.                b:=value(i);
  1360.                    usert.fm:=b;
  1361.                    writeout(a,usert);
  1362.                    print(' Modified stats saved');
  1363.              END;
  1364.  
  1365.        'J' : BEGIN
  1366.                PRINT('The planet in this sector is: '+cstr(usert.fo)+'.');
  1367.                PROMPT('New planet number: ');
  1368.                INPUT(i,3);
  1369.                b:=value(i);
  1370.                IF (b>=0) THEN
  1371.                  BEGIN
  1372.                    usert.fo:=b;
  1373.                    writeout(a,usert);
  1374.                    print(' Modified stats saved');
  1375.                  END
  1376.                ELSE PRINT('Invalid planet number ');
  1377.              END;
  1378.        'K' : BEGIN
  1379.                IF (a-lp) < 10 THEN
  1380.                  PRINT('The Imperial navy will not allow mines here.')
  1381.                ELSE
  1382.                  BEGIN
  1383.                    PRINT('The number of mines in this sector is: '+cstr(usert.fp)+'.');
  1384.                    PROMPT('Number of mines in sector: ');
  1385.                    INPUT(i,2);
  1386.                    b:=value(i);
  1387.                    IF (b>=0) AND (b<=20) THEN
  1388.                      BEGIN
  1389.                        usert.fp:=b;
  1390.                        writeout(a,usert);
  1391.                        print(' Modified stats saved');
  1392.                      END
  1393.                    ELSE PRINT('Invalid number of mines!');
  1394.                  END;
  1395.              END;
  1396.  
  1397.        'Q' : done:=true;
  1398.   END;
  1399. END;
  1400.  
  1401. procedure maintopen;
  1402.  
  1403. var
  1404.    opening : text;
  1405.    I,
  1406.    x : integer;
  1407.    hold : array[1..10] of string[160];
  1408.  
  1409.  
  1410. begin
  1411.   assign(opening,'tradewar\twopeng.dat');
  1412.   reset(opening);
  1413.   for i := 1 to 10 do hold[i] := '*';
  1414.   x := 0;
  1415.   repeat
  1416.     readln(opening);
  1417.     x := x + 1;
  1418.   until(eof(opening));
  1419.   reset(opening);
  1420.   x := x-4;
  1421.   readln(opening);
  1422.   readln(opening);
  1423.   if x > 11 then
  1424.     for I := 1 to (x-10) do readln(opening);
  1425.   x := 1;
  1426.   repeat
  1427.     readln(opening,hold[x]);
  1428.     x := x + 1;
  1429.   until ((x=10) or (eof(opening)));
  1430.   rewrite(opening);
  1431.   writeln(opening,'   -=-=-  Ravenloft Trade Wars Daily Journal for '+date+' -=-=- ');
  1432.   writeln(opening,' ');
  1433.   for x := 1 to 10 do
  1434.   begin
  1435.     if (hold[x] <> '*') then
  1436.       writeln(opening,hold[x]);
  1437.   end;
  1438.   writeln(opening,'/\/\/\/\/  The Ferrengi moved at '+time+', on '+date);
  1439. close(opening);
  1440. end;
  1441.  
  1442.  
  1443. Procedure Planeted;
  1444.  
  1445. var
  1446.       i : str;
  1447.     a,b : integer;
  1448.  
  1449. Begin
  1450.   nl;
  1451.   print('(Planet Editor)');
  1452.   nl;
  1453.   prompt('Which planet do you want displayed? ');
  1454.   input(i,3);
  1455.   IF i<>'' THEN
  1456.     Begin
  1457.     a:=value(i);
  1458.     if (a>0) AND (a<=150) THEN
  1459.       Begin
  1460.         a:= a+lt1;
  1461.         Readin(a,usert);
  1462.         cls;
  1463.         print('Complete record storage for Planet #'+cstr(a-lt1));
  1464.         nl;
  1465.         print(' <A> Planet Name: '+usert.fa);
  1466.         print('     usert.fb: '+cstr(usert.fb));
  1467.         print('     usert.fc: '+cstr(usert.fc));
  1468.         print('     usert.fd: '+cstr(usert.fd));
  1469.         print('     usert.fe: '+cstr(usert.fe));
  1470.         print(' <B> Ore on surface: '+cstr(usert.ff));
  1471.         print(' <C> Org on surface: '+cstr(usert.fg));
  1472.         print(' <D> Eqp on surface: '+cstr(usert.fh));
  1473.         print('     usert.fi: '+cstr(usert.fi)+
  1474.         '     usert.fj: '+cstr(usert.fj));
  1475.         print('     usert.fk: '+cstr(usert.fk)+
  1476.         '     usert.fl: '+cstr(usert.fl));
  1477.         print('     Length of name: '+cstr(usert.fm));
  1478.         print('     usert.fo: '+cstr(usert.fo)+
  1479.         '     usert.fp: '+cstr(usert.fp));
  1480.         print('     usert.fq: '+cstr(usert.fq)+
  1481.         '     usert.fr: '+cstr(usert.fr));
  1482.         print('     usert.ft: '+cstr(usert.ft)+
  1483.         '     usert.fv: '+cstr(usert.fv));
  1484.       END
  1485.     Else
  1486.         begin
  1487.           nl;
  1488.           print('Sorry, Charlie, but planets are numbered 1-150.');
  1489.         end;
  1490.     End
  1491.   Else
  1492.     Done := TRUE;
  1493. End;
  1494.  
  1495.  
  1496.  
  1497. PROCEDURE mainmenu;
  1498.  
  1499.   VAR
  1500.       i: STR;
  1501.       INT : INTEGER;
  1502.                                      (* 22000 *)
  1503. BEGIN
  1504.   nl;
  1505.   prompt('TWEditor Command: ');
  1506.   mmkey(i);
  1507.   If length(i)=1 then
  1508.       CASE i[1] OF
  1509.         'C' : Cabal;                 (* Romulan Cabal report *)
  1510.         'M' : maintopen;             (* Maintain opening log *)
  1511.         'G' : BEGIN                  (* General Game editor *)
  1512.                 done := FALSE;
  1513.                 REPEAT
  1514.                   gedit
  1515.                 UNTIL done or hangup;
  1516.               END;
  1517.         'S' : BEGIN                  (* Sector editor *)
  1518.                 done := FALSE;
  1519.                 REPEAT
  1520.                   sected
  1521.                 UNTIL done or hangup;
  1522.               END;
  1523.         'T' : Begin                  (* Planet Editor *)
  1524.                 done := false;
  1525.                 Repeat
  1526.                   planeted
  1527.                 until done or hangup;
  1528.               End;
  1529.  
  1530.         'U' : BEGIN                  (* User editor *)
  1531.                 done := FALSE;
  1532.                 REPEAT
  1533.                   uedit
  1534.                 UNTIL done or hangup;
  1535.               END;
  1536.  
  1537.         'Q' : ended := TRUE;         (* Quits to BBS *)
  1538.  
  1539.         else
  1540.             helpit;
  1541.  
  1542.       END;
  1543.   END;
  1544.  
  1545. BEGIN
  1546.   iport;
  1547.   ended := FALSE;
  1548.   IF NOT hangup
  1549.     THEN
  1550.       init;
  1551.   WHILE (NOT ended) AND (NOT hangup) DO
  1552.     mainmenu;
  1553.   CLOSE(userf);
  1554.  
  1555.   CLOSE(smg);
  1556.   ret := 200;
  1557.   return;
  1558. END.
  1559.